/**
* @file		sdk.h
* @brief	雅观智能网关第三方接口头文件
* @details	主要提供三方面的接口:注册、设备控制、空间设备读取
* @author	shixian.gao@argrace.ai 
* @date		2023/11/24
* @version	v0.0.1
* @par	Copyright(c): Hangzhou Yaguan Technology Co. LTD
* @par	History:
*			202311-v0.0.1,完成初版设计,当前支持内容,设备类型(照明\窗帘\空调网关\开关),场景触发,设备上线下线
*           20231204-v0.0.2,新增自定义端口接口
*/

/**tip1
 * SDK 彩灯模式枚举id
1	七彩渐变	21	青色频闪
2	红绿渐变	22	红绿频闪
3	红蓝渐变	23	
4	绿蓝渐变	24	绿蓝频闪
5	七彩呼吸	25	七彩跳变
6	红色呼吸	26	紫蓝绿渐变
7	绿色呼吸	27	紫蓝绿频闪
8	蓝色呼吸	28	紫蓝绿呼吸
9	黄色呼吸	29	金色渐变
10	紫色呼吸	30	金色呼吸
11	青色呼吸	31	紫白蓝渐变
12	红绿呼吸	32	紫白蓝呼吸
13	红蓝呼吸	33	黄蓝渐变
14	绿蓝呼吸	
15	七色频闪	
16	红色频闪	
17	绿色频闪	
18	蓝色频闪	
19	黄色频闪	
20	紫色频闪	
*/

/**tip2
 * 设备描述表
{
    "fl": 1,//楼层id
    "flN": "一层",//楼层名字
    "gwid": 149772,//对应当前子网的网关识别id
    "hid": 25,//房间id
    "rooms": [
        {
            "ds": [//设备列表
				//maddr-设备地址  dt-设备类型 dt-具体设备名字  ns-设备在线状态
                {"maddr": 324,"dt": 6,"name": "五路灯带SZW_4_1","ns": 1},
                {"maddr": 356,"dt": 49,"name": "窗帘电机(BLE Mesh)","ns": 1},
                {"maddr": 358,"dt": 44,"name": "空调内机","ns": 1},
                {"maddr": 359,"dt": 16,"name": "小悦管家_2","ns": 1},
                {"maddr": 360,"dt": 6,"name": "五路灯带SZW_4_2","ns": 1},
                {"maddr": 365,"dt": 2,"name": "华潮三路复合开关_4","ns": 1}
            ],
            "gInfo": [//组列表
				//gaddr-组地址   gId-组id  gN-组的名字  type-组类型
                 {"gaddr": 49208,"gId": 19700,"gN":"灯带全关","type": "0"},
                 {"gaddr": 49174,"gId": 18986,"gN":"灯带全开","type": "0"},
                 {"gaddr": 49163,"gId": 18770,"gN":"会客模式","type": "0"},
                 {"gaddr": 49153,"gId": 18216,"gN":"xxxxxxx","type": "1"},
                 {"gaddr": 49154,"gId": 18217,"gN":"xxxxxxxx","type": "2"}         
            ],
            "roomId": 4829,//套间id
            "rN": "客厅" //套间名字
        }
    ]
}
*/


/**tip3
 * 设备描述文件设备类型取值定义(dt字段),目前只支持打*号的
1(智能)插座*	2开关*	3窗帘开关*	4场景开关*	5灯泡*	6灯带*	7温湿度传感器	8门磁	9人体传感器	
10浸水传感器	11燃气报警器	12烟雾报警器	13家用门锁	14皮肤仪	15调光开关	16Test1 有线网关
17通断器*	18睡眠监测仪	19跌倒检测仪	20电视	21智能水杯	22滑板车	23电源插座	24感应灯
25吸顶灯*	26取暖灯*	27风扇灯*	28筒灯*		29射灯*		30无线开关		31照明遥控器	32轨道磁吸灯	33空调*
34窗帘电机*		35环境传感器	36两线方案*		37磁吸灯*	38影音娱乐	39摄像头	40app	41浴霸	42红外遥控器
43空调遥控器	44电视遥控器	45恒照灯	46创新产品	47其他	48温控器	49无线网关	50热水器
*/



#ifndef _SDK_H_
#define _SDK_H_


/** SDK调用返回码*/
#define SDK_OK 0
#define SDK_PARAMS_ERR -1
#define SDK_NULLPTR_ERR -2
#define SDK_UNINIT_ERR -3
#define SDK_UNAUTH_ERR -4
#define SDK_ADDR_ERR -5
#define SDK_SOCKRECV_ERR -6
#define SDK_SOCKSEND_ERR -7
#define SDK_PARSE_ERR  -8
#define SDK_ENCRYPT_ERR -9
#define SDK_DECRYPT_ERR -10
#define SDK_SOCKIOCTL_ERR -11
#define SDK_SOCKINIT_ERR -12
#define SDK_THREAD_ERR -13
#define SDK_BUFFER_ERR -14
#define SDK_UNKNOW_ERR -255




/**
* @brief	智能插座状态数据结构
* @details	该设备具备通断器功能,并可以对接一个空调设备并可以返回空调状态
*/
struct device_smart_outlet_aircond_t{
    unsigned char swonoff; 					/*!<插座(继电器)开关 0关,1开 */
    unsigned char aircond_onoff;			/*!<空调开关 0关,1开 ,此值为255(0xFF),则空调数据部分无效*/
    unsigned char temp;						/*!<设置温度 (1~15代表16~30度) */
    unsigned char overload; 				/*!<过载警报 0正常,1过载 */
    unsigned char gear;						/*!<档位 0~5 */
    unsigned char mode;						/*!<模式 1~10 */
    unsigned int consumption;				/*!<累计功耗 单位：100mWH(0.1瓦时) */
    unsigned char wind_direction_updown;	/*!<上下扫风状态 0关，1开 */
    unsigned char wind_direction_leftright;	/*!<左右扫风状态 0关，1开 */
    unsigned char currenct;					/*!<电流 单位mA */
    unsigned short power;					/*!<功率 单位: 100mW（0.1瓦） 范围: [0w，6553.5w] */
    unsigned char voltage;					/*!<电压 单位: V  范围：[20v~275v]计算公式：电压 = value + 20 */ 
};

/**
* @brief	色温灯状态数据结构
* @details	灯具处于双色温状态下的照明参数数据结构
*/
struct device_light_cw_t{
    unsigned char onoff;					/*!<灯开光开关状态,1-开 0-关 */
    unsigned char lnss;						/*!<双色灯亮度,1-100,0-会灭灯(一般最低亮度为1,开关灯请使用onoff参数) */
    unsigned char colortemp;				/*!<双色灯色温,0-100,0-纯黄 100-纯白 */
};

/**
* @brief	rgb灯状态数据结构
* @details	灯具处于RGB状态下的照明参数数据结构
*/
struct device_light_color_t{
    unsigned char onoff;					/*!<彩色灯开关状态,1-开 0-关 */
    unsigned short hue;						/*!<色相 0-360 */
    unsigned char saturation;				/*!<饱和度 0-100 */
    unsigned char brightness;				/*!<明度 1-100,0-会灭灯(一般最低亮度为1,开关灯请使用onoff参数) */
};

/**
* @brief	开关状态数据结构
* @details	每个字节代表一个开关状态,单个开关设备最多4个开关状态
*/
struct device_switch_t{
    unsigned int switchidx;                 /*!<开关设备开光状态,每个字节对应一个开关状态,0-打开 1-闭合 开关的序号跟随字节序号*/
};

/**
* @brief	窗帘状态数据结构
* @details	窗帘设备运行或者最终停止运动时返回的状态
*/
struct device_curtain_t{
    unsigned char motorOnOff;				/*!<电机状态 1打开,2关闭,3停止 */
    unsigned char direction;				/*!<方向设置 1正向,2反向,3换向 */
    unsigned char handdrag;					/*!<手拉启动设置 0无手拉启动,1有手拉启动 */
    unsigned char motorPosition;			/*!<电机位置控制  0%~100%,0xFF上报电机找不到百分比 */
    unsigned char angleDirection;			/*!<角度方向 0:向右, 1:停止, 2:向左转 */
    unsigned char andglePercentage;			/*!<角度百分比  0~100% */
};

/**
* @brief	空调设备状态数据结构
* @details	个别字段不适用,此数据结构目前只针对空调设备
*/
struct device_CAC_t{
    unsigned char devType; 					/*!<新风/地暖/空调外机/空调内机 (当前不使用) */
    unsigned char onoff;					/*!<0-off 1-on */
    unsigned char tempInRoom;				/*!<温度(室温) 1~15代表16~30度 */
    unsigned char windspeed;				/*!<0-5,0-自动（内机）  1-高速 2-中速 3-中高速 4-低速 5-中低速 */				
    unsigned char mode;						/*!<空调机模式:1-10,0-无效 1-设定制冷 2-设定除湿 3-设定清爽 4-设定送风 5-设定自动除湿 6-设定贴心睡眠 8-设定制热 9-设定地暖 10-设定强热（地暖和制热同时开启） */
    unsigned char error;					/*!<0-no error */
    unsigned char onoffline;				/*!<1-online 0-offline 描述空调网关485总线上的空调设备在线还是离线*/
    unsigned char temp;						/*!<1~15代表16~30度 （用于地暖设备上报） */
    unsigned char antifreeze_winddirection;	/*!<antifreeze: 0-off 1-on    winddirection:0 无导风板(上报)- 1 小角度 2 中角度 4 大角度 7 摆动 */
    unsigned char aircondtemp;				/*!<设置温度（1~15代表16~30度）*/
    unsigned char direction;				/*!<内机风向: 0-无导风板(上报) 1-小角度 2-中角度 4-大角度 7-摆动 */
};


/**
* @typedef	回调数据指针的数据类型标识
*/
typedef enum{
    enum_mt_outlet = 1,		/*!<for struct device_smart_outlet_aircond_t */
    enum_mt_sw = 2,			/*!<for struct device_switch_t */
    enum_mt_cw =3,			/*!<for struct device_light_cw_t */
    enum_mt_color = 4,		/*!<for struct device_light_color_t */
    enum_mt_aircond=5,		/*!<for struct device_CAC_t */
    enum_mt_curtain=6,		/*!<for struct device_curtain_t */
    enum_mt_max = 0xFF
}enum_device_type_t;


/**
* @brief	sdk_init初始化函数
* @details	sdk初始化 设置一些基本的参数，用于建立和雅观智能网关的通讯认证和链接
* @param[in]	retry-认证接口重复发送次数(建议取值1-2) 
* @param[in]	devid-设备三元组的设备id,字符串类型	
* @param[in]	productKey-设备三元组的产品键值,字符串类型  
* @param[in]	deviceSecret-设备三元组的设备私钥,字符串类型
* @return	SDK_OK-正常 
* @return	SDK_PARAMS_ERR-参数错误
* @
*/
int sdk_init(unsigned char retry,char devid[35],char productKey[15],char deviceSecret[35]);

/**
* @brief	sdk_buffer_set设置sdk的认证通讯接口和数据通讯接口的缓存
* @details	sdk有两套通讯接口,auth接口和data接口。必须使用auth接口完成认证流程后才能使用data接口,否则无法控制雅观智能网关内部设备和获取状态
* @param[in]	authbuf,认证缓存指针
* @param[in]	authlen,认证缓存大小,建议512-1024字节
* @param[in]	databuf,数据缓存指针
* @param[in]	datalen,数据缓存大小,建议512-1024字节
* @return	SDK_OK-正常
* @return	SDK_PARAMS_ERR-参数错误
*/
int sdk_buffer_set(unsigned char *authbuf,int authlen,unsigned char *databuf,int datalen);

/**
* @brief sdk_target_ip_set根据ip地址建立认证需要的资源
* @details	雅观网关对应ip地址,请查看雅观智能app对应网关的ip地址
* @param[in]	ipstr字符串指针,形式 "192.168.1.222" 
* @param[in]	len字符串长度
* @return	SDK_PARAMS_ERR-参数错误 
* @return	SDK_SOCKINIT_ERR-创建socket错误
* @return	SDK_THREAD_ERR -创建线程错误
* @return	SDK_OK-正常
*/
int sdk_target_ip_set(char ipstr[16],unsigned char len);

/**
* @brief sdk_target_ip_port_set根据ip地址建立认证需要的资源
* @details	雅观网关对应ip地址,请查看雅观智能app对应网关的ip地址
* @param[in]	ipstr字符串指针,形式 "192.168.1.222" 
* @param[in]    authport本地认证通讯端口
* @param[in]    dataport本地数据通讯端口
* @param[in]	len字符串长度
* @return	SDK_PARAMS_ERR-参数错误 
* @return	SDK_SOCKINIT_ERR-创建socket错误
* @return	SDK_THREAD_ERR -创建线程错误
* @return	SDK_OK-正常
*/
int sdk_target_ip_port_set(char ipstr[16],unsigned char len,unsigned short authport,unsigned short dataport);



/**
* @brief	sdk_auth_regist_send发送注册信息
* @details	执行后大概等待1s左右查询一下认证状态,可多次调用,调用间隔建议2s以上,这部分涉及网络通讯和云端认证需要的时间比较久
* @param[in]	retry-单次认证数据发送次数(建议1-2)
* @return	ret>0 发送的数据长度
* @return	SDK_NULLPTR_ERR-空指针 
* @return	SDK_SOCKSEND_ERR-发送失败
*/
int sdk_auth_regist_send(unsigned char retry);

/**
* @brief	sdk_auth_unregist_send发送解绑信息
* @details	发送后无返回,可通过sdk_heart_beat接口查询雅观智能网关是否返回正常,通过sdk_auth_status接口查询本地是否清除注册信息
* @param[in]	retry-单次认证数据发送次数(建议1-2)
* @return	ret>0 发送的数据长度
* @return	SDK_NULLPTR_ERR-空指针 
* @return	SDK_SOCKSEND_ERR-发送失败
*/
int sdk_auth_unregist_send(unsigned char retry);

/**
* @biref sdk_auth_status认证状态查询
* @return	SDK_OK-正常
* @return	SDK_UNAUTH_ERR-没有认证数据
* @attention	建议认证回调流程里使用确认是否认证成功
*/
int sdk_auth_status(void);



/**
 * @brief   sdk_auth_get_desction_file获取设备描述表
 * @details	认证通过后可以通过此调用获取描述文件下载链接
 * @param[out]	buffer
 * @param[out]	len
 * @return	SDK_PARAMS_ERR 
 * @return	SDK_NULLPTR_ERR 
 * @return	SDK_UNAUTH_ERR 
 */
int sdk_auth_get_desction_file(char *buffer,int len);


/**
* @brief	sdk_light_ctl_cw色温灯状态控制
* @details	只对具备色温model属性的灯具有效
* @param[in] addr-灯具地址/组地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in] onoff-灯具开关状态 0-关灯 1-开灯
* @param[in] lnss-亮度,1-100
* @param[in] colortemp-色温,0(纯黄)-100(纯白)
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_light_ctl_cw(unsigned short addr,unsigned char onoff,unsigned char lnss ,unsigned char colortemp);

/**
* @brief	sdk_light_ctl_color彩色灯状态控制
* @details	只对具备彩色model属性的灯具有效
* @param[in]	addr-灯具地址/组地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	onoff-灯具开关状态 0-关灯  1-开灯
* @param[in]	h-hue色相,0-360
* @param[in]	s-saturation饱和度,0-100
* @param[in]	b-brightness亮度,0-100
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_light_ctl_color(unsigned short  addr,unsigned char onoff,unsigned short  h,unsigned char s,unsigned char b );

/**
* @brief	sdk_light_ctl_sence灯具场景触发
* @details	只对记录此场景的设备有响应
* @param[in]	addr-灯具地址/组地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	onoff-灯具开关状态 0-关灯  1-开灯
* @param[in]	senceid-场景ID,16bits且不能为0
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_light_ctl_sence(unsigned short  addr,unsigned char onoff,unsigned short  senceid);

/**
* @brief	sdk_light_ctl_rgb_mode彩灯模式触发
* @details	对应雅观智能APP的彩色控制页面里的RGB模式列表
* @param[in]	addr-灯具地址/组地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	speed-rgb颜色变化速度
* @param[in]	rgbmode-rgb模式id
* @see	本文件顶部的 "SDK 彩灯模式枚举id"说明
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_light_ctl_rgb_mode(unsigned short  addr,unsigned char speed,unsigned char rgbmode);

/**
* @brief	sdk_ctl_sense场景控制
* @details	通用场景触发函数,可以指定某个组、设备、全部设备的地址
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	senceid-场景ID
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR	
*/
int sdk_ctl_sense(unsigned short  addr,unsigned short  senceid);

/**
* @brief	sdk_ctl_onoff开关控制
* @details	具备开关model的设备会响应
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	onoff-设备开关状态 0-断开 1-闭合
* @parame[in]	swidx-开关序列号，最大支持4
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR	
*/
int sdk_ctl_onoff(unsigned short addr,unsigned char onoff,unsigned char swidx);

/**
* @brief	sdk_cloud_report数据上报云端
* @details	根据第三方和雅观云端的协议，第三方发送数据给雅观云端
* @param[in]	addr-第三方设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	msg-消息缓冲区指针,字符串类型
* @parame[in]	msglen-消息长度
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR	
*/
int sdk_cloud_report(unsigned short addr,char *msg,unsigned short msglen);


/**
* @brief	sdk_curtain_motor_status_set窗帘电机设置
* @details	具备窗帘电机model的设备进行窗帘控制
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	open_close_stop-状态参量,1打开 2关闭 3停止
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_motor_status_set(unsigned short addr,unsigned char open_close_stop);

/**
* @brief	sdk_curtain_motor_percentage_abs_set窗帘电机绝对值设置
* @details	窗帘电机导轨运动位置绝对比值
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	percentage-导轨的位置,绝对值百分比表示，电机执行百分比命令， 0%~100%，0xFF上报电机找不到百分比
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_motor_percentage_abs_set(unsigned short addr,unsigned char percentage);

/**
* @brief	sdk_curtain_direction_set窗帘电机开合方向设置
* @details	设置窗帘开合的正反，需要根据实际的窗帘闭合打开来设定
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	direction-电机开合方向,0正向 1反向
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_direction_set(unsigned short addr,unsigned char direction);

/**
* @brief	sdk_curtain_hand_drag窗帘手动拉扯设置
* @details	设置窗帘电机是否可以拖拽,使得用户可以自己手动控制窗帘
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	dragFlag-手拉窗帘开关参数,0无手拉启动 1有手拉启动
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_hand_drag(unsigned short addr,unsigned char dragFlag);

/**
* @brief	sdk_curtain_motor_percentage_rel_set窗帘电机相对位置设置
* @details	当前开关位置行程的百分比位置
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	incOrdec-手拉窗帘开关参数,位置加减，1加，0减
* @param[in]	percentage-当前相对位置百分比,百分比0%~100%
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_motor_percentage_rel_set(unsigned short addr,unsigned char incOrdec,unsigned char percentage);

/**
* @brief	sdk_curtain_dimming_limit_set设置限位(调光限位)
* @details	先将窗帘完全关闭后，发送该命令后，窗帘自动进行调光限位设定
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	param-固定值0
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_dimming_limit_set(unsigned short addr,unsigned char param);

/**
* @brief	sdk_curtain_angle_control_percentage_set窗帘合页旋转百分比
* @details	有些窗帘类似百叶窗那样子是有开合角度的
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	percentage-角度百分比,0~100 （梦幻帘）
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_angle_control_percentage_set(unsigned short addr,unsigned char percentage);

/**
* @brief	sdk_curtain_angle_control_direction_set窗帘合页旋转方向设置
* @details	有些窗帘类似百叶窗那样子是有开合方向的
* @param[in]	addr-设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	direction-角度方向,0-向右转(梦幻帘) 1-停止 2-向左转
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_curtain_angle_control_direction_set(unsigned short addr,unsigned char direction);





/**
* @brief	sdk_aircond_onoff空调开关
* @details	控制空调的开关状态
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	onoff-开关状态,0-关闭 1-打开
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_onoff(unsigned short addr,unsigned short subaddr,unsigned char onoff);

/**
* @brief	sdk_aircond_temp空调温度控制
* @details	控制空调的出风温度
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	temp-温度,16-30,单位摄氏度
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_temp(unsigned short addr,unsigned short subaddr,unsigned char temp);

/**
* @brief	sdk_aircond_mode空调模式控制
* @details	控制空调的工作模式
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	mode工作模式 00-无效 0x01-设定制冷 0x02-设定除湿 0x03-设定清爽 0x04-设定送风 0x05-设置自动除湿 0x06-设定贴心睡眠 0x08-设定制热 0x09-设定地暖 0x0a-设定强热
* @attention	中央空调没有自动模式
				内机只有4种模式：制热 制冷 送风 除湿
				内机只有4中风速：自动 低速 中速 高速
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_mode(unsigned short addr,unsigned short subaddr,unsigned char mode);

/**
* @brief	sdk_aircond_windspeed
* @details	控制空调的出风速度
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	speed-风速，0x00-自动(内机) 0x01-高速 0x02-中速 0x03-中高速 0x04-低速 0x05-中低速
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_windspeed(unsigned short addr,unsigned short subaddr,unsigned char speed);

/**
* @brief	sdk_aircond_antifreeze
* @details	空调的抗冷冻开关
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	onoff-开关状态,1-开启 0-关闭
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_antifreeze(unsigned short addr,unsigned short subaddr,unsigned char onoff);

/**
* @brief	sdk_aircond_wind_direction
* @details	控制空调的出风方向
* @param[in]	addr-设备地址,一般是空调网关地址
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	subaddr-子设备地址,实际子网关地址或者网关地址(此时可为0)
* @see	查看本文件头部的 "设备描述表"tip2
* @param[in]	direction-方向参数,0-无导风板（上报） 1-小角度 2-中角度 4-大角度 7-摆动
* @return	SDK_PARAMS_ERR 
* @return	SDK_NULLPTR_ERR 
* @return	SDK_UNAUTH_ERR 
* @return	SDK_ENCRYPT_ERR 
* @return	SDK_SOCKSEND_ERR
*/
int sdk_aircond_wind_direction(unsigned short addr,unsigned short subaddr,unsigned char direction);




/**
* @brief	设备在线离线回调注册函数	
*/
int sdk_device_onoffline_funcb_regist(void (* pfunc)(unsigned short addr,unsigned char onoffline));

/**
* @brief	第三方设备扩展数据回调注册函数
*/
int sdk_device_extdata_funcb_regist(int (* pfunc)(unsigned short addr,const char *extdata,unsigned short extdataLen));

/**
* @brief	第三方设备雅观智能子网数据回调注册函数	
*/
int sdk_device_data_funcb_regist(void (* pfunc)(unsigned short addr,int modelTye,void* pdata));

/**
* @brief	sdk_heart_beat心跳回复回调注册函数
*/
int sdk_heart_beat(void (*fp)(int),int code);


/**
* @brief sdk_param_set 
*/
void sdk_param_set(const char *cmd);


#endif